/* ***** BEGIN LICENSE BLOCK *****
 *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Seoprofesional
 *
 * The Initial Developer of the Original Code is
 * Petr Blahoš.
 * Portions created by the Initial Developer are Copyright (C) 2009
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 * 
 * ***** END LICENSE BLOCK ***** */
Components.utils.import("resource://seoprofesional/seopdb.jsm");

function LOG(msg) {
  console.log(msg);
}

function extract_uri(uri) {
	var p0 = uri.indexOf("uri=");
	if (-1==p0)	return "";
	return uri.substr(p0+4);
}

function do_plot(uri) {
	uri = extract_uri(uri);
	if (""==uri) {
		$("#chart").html("");
		return;
	}


	var datasets = [];	// datasets for flot.plot
	var origdata = [];	// the values datasets were made from
	var ranks = [];	// the order of the ranks in datasets
	var date_format = seop_global.date_format;

	for (var ff = 0;ff<seop_global.fetchers.length;ff++) {
		var f = seop_global.fetchers[ff];
		if (f.enabled) {
			var tl = seopdb.get_tl(uri, f.id);
			if (tl.length>0) {
				var data = [];
				var od = [];
				var last = null;
				for (var i = 0;i<tl.length;i++) {
					if (f.coherent) {
					} else if (null!=last && last[1]!=tl[i][1]) {
						data.push(null);
						od.push(null);
					}
					data.push([ tl[i][0].getTime(), tl[i][1]/f.get_max(tl)*100 ]);
					od.push(tl[i]);
					last = tl[i];
				}
				datasets.push({
					data: data,
					label: f.nicename,
					color: f.color,
					valueLabelFunc: formatValue
				});
				origdata.push(od);
				ranks.push(f);
			}
		}
	}

	$.plot($("#chart"), datasets, {
		xaxis: { mode: "time", timeformat: date_format, labelHeight: 50, labelWidth:2 },
		yaxis: { min:0, max: 105, tickFormatter: function(axis,v) {return '';} },
		//y2axis: { min:0, max: 10 },
		points: { show: true, radius: 2 },
		lines: { show: true, fill: false },
		grid: { hoverable: true },
		valueLabels: { show: true, valueLabelFunc: formatValue },
		legend: { position: 'nw' }
	});
	function formatValue(item) {
		return origdata[item.seriesIndex][item.index][1];
	}

	var previousPoint = null;
	$("#chart").bind("plothover", function (event, pos, item) {
		if (item) {
			if (previousPoint != item.datapoint) {
				previousPoint = item.datapoint;

				$("#tooltip").remove();
				var d = origdata[item.seriesIndex][item.dataIndex];
				var contents = SeoprofesionalTools.format_date(d[0], date_format) + ":<br>" + ranks[item.seriesIndex].nicename + "=" + d[1];
				$('<div id="tooltip">' + contents + '</div>').css( {
					top: item.pageY + 5,
					left: item.pageX + 5,
				}).appendTo("body").fadeIn(200);
			}
		} else {
			$("#tooltip").remove();
			previousPoint = null;
		}
	});
}

